package br.com.ozsolucoes.managedbean.negocio.cliente;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.ozsolucoes.entity.Categoria;
import br.com.ozsolucoes.entity.Cliente;
import br.com.ozsolucoes.entity.Contas;
import br.com.ozsolucoes.entity.Servico;
import br.com.ozsolucoes.entity.Ticket;
import br.com.ozsolucoes.managedbean.base.BaseManagedBean;
import br.com.ozsolucoes.sessionbeans.CategoriaSessionBean;
import br.com.ozsolucoes.sessionbeans.ContasSessionBean;
import br.com.ozsolucoes.sessionbeans.ServicoSessionBean;
import br.com.ozsolucoes.sessionbeans.TicketSessionBean;
import br.com.ozsolucoes.util.ClienteSessaoManagedBean;
import br.com.ozsolucoes.util.Constantes;
import br.com.ozsolucoes.vo.CategoriaUsuarioVO;

@ViewScoped
@ManagedBean
public class MeuPerfilManagedBean extends BaseManagedBean implements Serializable {

	private static final long serialVersionUID = -1629707150530816094L;

	public MeuPerfilManagedBean() {
		super();
	}

	@PostConstruct
	public void init() {
		if (null == servicoCliente) {
			try {
				servicoCliente = servicoSessionBean.consultarServicoVingente(cliente.getId());
				if (0 == qtdTicketAbertos) {
					qtdTicketAbertos = ticketSessionBean.contarTicketAbertosClientePorServico(cliente.getId(), servicoCliente.getId());
				}
				if (0 == qtdTicketFechados) {
					qtdTicketFechados = ticketSessionBean.contarTicketFechadosClientePorServico(cliente.getId(), servicoCliente.getId());
				}
				if (0 == qtdTotalTickets) {
					qtdTotalTickets = qtdTicketAbertos + qtdTicketFechados;
				}
			} catch (Exception e) {
			}
		}
		
		if (categoriasCliente.isEmpty() && null != servicoCliente) {
			categoriasCliente = categoriaSessionBean.consultarCategoriasVingente(servicoCliente.getId());
		}
		if (null == proximaConta && null != servicoCliente) {
			proximaConta = new Contas();
			try {
				contasCliente = contasSessionBean.consultarContasPendentesClientePorServico(cliente.getId(), servicoCliente.getId());
				proximaConta = contasCliente.get(0);
			} catch (Exception e) {
			}
		}
		if (categoriaUsuarioVO.isEmpty()) {
			categoriaUsuarioVO.clear();
			for (Categoria categoria : getCategoriasCliente()) {
				CategoriaUsuarioVO vo = new CategoriaUsuarioVO();
				vo.setCategoria(categoria.getCategoria());
				vo.setNuTicket(ticketSessionBean.contarTicketAbertosClientePorCategoria(cliente.getId(), categoria.getCategoria()) + ticketSessionBean.contarTicketFechadosClientePorCategoria(cliente.getId(), categoria.getCategoria()));
				categoriaUsuarioVO.add(vo);
			}
		}
	}

	private Servico servicoCliente;

	private long qtdTicketAbertos;
	private long qtdTicketFechados;
	private long qtdTotalTickets;

	private Cliente cliente = ClienteSessaoManagedBean.getInstance().getClienteSessao();
	private Contas proximaConta;

	private List<Categoria> categoriasCliente = new ArrayList<Categoria>();

	private List<CategoriaUsuarioVO> categoriaUsuarioVO = new ArrayList<CategoriaUsuarioVO>();

	private List<Contas> contasCliente = new ArrayList<Contas>();

	@EJB
	private ServicoSessionBean servicoSessionBean;
	@EJB
	private TicketSessionBean ticketSessionBean;
	@EJB
	private CategoriaSessionBean categoriaSessionBean;
	@EJB
	private ContasSessionBean contasSessionBean;

	public String listarTicketCategoria(CategoriaUsuarioVO categoria) {
		Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
		List<Ticket> listaTicketClienteCategoria = ticketSessionBean.consultarTicketClientePorCategoria(cliente.getId(), categoria.getCategoria());
		requestMap.put("listaTickets", listaTicketClienteCategoria);
		return Constantes.LISTAR_TICKETS;
	}

	public Servico getServicoCliente() {
		return servicoCliente;
	}

	public void setServicoCliente(Servico servicoCliente) {
		this.servicoCliente = servicoCliente;
	}

	public long getQtdTicketAbertos() {
		return qtdTicketAbertos;
	}

	public void setQtdTicketAbertos(long qtdTicketAbertos) {
		this.qtdTicketAbertos = qtdTicketAbertos;
	}

	public long getQtdTicketFechados() {
		return qtdTicketFechados;
	}

	public void setQtdTicketFechados(long qtdTicketFechados) {
		this.qtdTicketFechados = qtdTicketFechados;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public long getQtdTotalTickets() {
		return qtdTotalTickets;
	}

	public void setQtdTotalTickets(long qtdTotalTickets) {
		this.qtdTotalTickets = qtdTotalTickets;
	}

	public List<Categoria> getCategoriasCliente() {
		return categoriasCliente;
	}

	public void setCategoriasCliente(List<Categoria> categoriasCliente) {
		this.categoriasCliente = categoriasCliente;
	}

	public Contas getProximaConta() {
		return proximaConta;
	}

	public void setProximaConta(Contas proximaConta) {
		this.proximaConta = proximaConta;
	}

	public List<CategoriaUsuarioVO> getCategoriaUsuarioVO() {
		return categoriaUsuarioVO;
	}

	public void setCategoriaUsuarioVO(List<CategoriaUsuarioVO> categoriaUsuarioVO) {
		this.categoriaUsuarioVO = categoriaUsuarioVO;
	}

	public List<Contas> getContasCliente() {
		return contasCliente;
	}

	public void setContasCliente(List<Contas> contasCliente) {
		this.contasCliente = contasCliente;
	}

}
